export type IAny = Record<string, string | number | boolean | Date>

/**
 * Js 中的分组, 由于需要兼容浏览器, 所以手写
 * @param array
 * @param key
 * @returns
 */
export function groupBy(array: Array<IAny>, key: string) {
  const result: {
    [
      key: string | number
    ]: // | IAny | { [key: string | number]: IAny } | Array<IAny | { [key: string | number]: IAny }>
    Array<IAny | { [key: string | number]: IAny }>
  } = {}

  array.forEach((item) => {
    // 根据字符串动态获取分组键的值
    const keyValue = item[key]
    if (typeof keyValue === 'boolean') throw new Error('参数key的项 不能为 boolean类型')
    if (typeof keyValue === 'object') throw new Error('参数key的项 不能为 boolean类型')

    // 如果结果对象中还没有这个键，则初始化为空数组
    if (!result[keyValue]) {
      result[keyValue] = []
    }

    // 将当前元素添加到对应的分组中
    result[keyValue].push(item)
  })

  return result
}

/**
 * 给出 数字生成数组
 * @param start
 * @param count
 * @returns
 */
export function range(start: number = 1, count: number = 1) {
  return Array.from({ length: count }, (_, index) => start + index)
}
